from utils.electrode_ctrl import ElectrodeCtrl
import numpy as np
from time import sleep,time

def sleep_us(us:float):
    sleep(us / 1_000_000)

if __name__=='__main__':
    frame_open = np.zeros((8,8))
    elec = []
    #elec.append(ElectrodeCtrl('COM13', 115200, 'com')) # 1号板子（远离风扇）
    elec.append(ElectrodeCtrl('COM14', 115200, 'com')) # 2号板子（靠近风扇）

    # 以下为压力测试代码，自行忽略
    # while True:
    #     test_freq = 100
    #     elec[0].set_tick(np.zeros((8,8)),50,100,1,500)
    #     print('*')
    #     sleep(0.5/test_freq)
    #     print(elec[0].s.read_all())
    #     sleep(0.5/test_freq)

    pattern = np.zeros((8,8))

    while True:
        for line in range(8):
            print(f'正在扫描第{line+1}行')
            print('持续扫描1s')
            count = 0

            start_time = time()  # 记录开始扫描该行的时间
            while time() - start_time < 1:  # 持续1秒钟
                # 单点，从左扫到右
                for i in range(8):
                    pattern[line, i] = 1
                    #print(pattern)
                    for index, board in enumerate(elec):
                        # 取消板子高阻态
                        board.on()
                        #print(f' 第{index + 1}个板子{line + 1}行,第{i + 1}个电极点')
                        # print(pattern)
                        board.set_tick(pattern=pattern,
                                       pp=10,
                                       pw=5,
                                       pn=1,
                                       bp=10 ,
                                       pulse_type='neg'
                                       )

                        #tick_start_time = time()
                        sleep_us(1)  # Sleep for 1 microsecond
                        #pattern[line, i] = 0
                        board.off()
                        #tick_end_time = time()

                        # Adjust sleep time based on time taken for other operations
                        #tick_duration = tick_end_time - tick_start_time
                        #print(f"Tick duration: {tick_duration}")
                        # remaining_time = 0.000001 - tick_duration  # 1 microsecond in seconds
                        # if remaining_time > 0:
                        #     time.sleep(remaining_time)

                        #print("current time:", time())
                count += 1
            print(f'第{line + 1}行扫描完毕')
            print(f'第{line + 1}行扫描次数：{count}')

                # # 对于每块板子
                # for index, board in enumerate(elec):
                #
                #     # 取消板子高阻态
                #     board.on()
                #
                #     # 单点，从左扫到右
                #     for i in range(8):
                #         pattern[line, i] = 1
                #         print(f' 第{index + 1}个板子{line + 1}行,第{i + 1}个电极点')
                #         # print(pattern)
                #         board.set_tick(pattern=pattern,
                #                        pp=100,
                #                        pw=50,
                #                        pn=1,
                #                        bp=100,
                #                        pulse_type='neg'
                #                        )
                #
                #         sleep_us(100)
                #         pattern[line, i] = 0


